﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace EaWebService
{

    /// <summary>
    /// Interface for crossover 
    /// </summary>
    public interface ICrossover<T>
    {
        void CrossoverOnePoint(T father, T mother, List<T> newpopulation);
        void CrossoverTwoPoints(T father, T mother, List<T> newpopulation);
        void CrossoverUniform(T father, T mother, double probability, List<T> newpopulation);
        void CrossoverHalfUniform(T father, T mother, double probability, List<T> newpopulation);
    }

    /// <summary>
    /// Interface for mutation 
    /// </summary>
    public interface IMutation
    {
        void MutationRandom();
        void MutationExchange();
        void MutationDisplacement();
        void MutationScramble();
        void MutationInsertion();
        void MutationInversion();
        void MutationDisplacedInversion();
    }

    /// <summary>
    /// Interface for selection 
    /// </summary>
    public interface ISelection<T>
    {
        T SelectionRouletteWheel();
        T SelectionTournament();
        T SelectionAlternateTournament();
    }

    /// <summary>
    /// Interface for scaling fitness function
    /// </summary>
    public interface IFitnessScale
    {
        void FitnessScaleRank();
        void FitnessScaleSigma();
        void FitnessScaleBoltzmann();
    }
}
